package cn.edu.zsc.rbac.service.collection;

import cn.edu.zsc.rbac.domain.dto.DeptDto;
import cn.edu.zsc.rbac.domain.entity.Dept;
import cn.edu.zsc.rbac.domain.vo.DeptVo;
import cn.edu.zsc.rbac.domain.vo.Result;
import cn.edu.zsc.rbac.service.IDeptService;
import cn.edu.zsc.rbac.service.IUserService;
import cn.edu.zsc.rbac.util.SingletonFactory;

import java.time.LocalDateTime;

@Deprecated
public class DeptService extends BaseService<Dept, DeptDto, DeptVo> implements IDeptService {
    /**
     * 创建新的部⻔并将其存储到数据数组中。
     * <p>
     * 本⽅法接收⼀个 `DeptDto` 对象作为输⼊，使⽤其中的部⻔名称和电话创建⼀个新的部⻔对
     象。
     * 如果当前存储的部⻔数量没有超过最⼤容量限制，⽅法将为新部⻔分配⼀个 ID，并将其存储
     在数据数组中。
     * 如果存储容量已满，则返回创建失败的结果。
     * </p>
     *
     * @param dto 包含新部⻔信息的 `DeptDto` 对象
     * @return 返回⼀个包含操作结果的 `Result` 对象，表示创建是否成功
     */
    /**
     * 将部⻔实体对象转换为部⻔视图对象（DeptVo）。
     *
     * @paramdept部⻔实体对象（Dept），包含了部⻔的基本信息。
     * @return 返回转换后的部⻔视图对象（DeptVo），包含了部⻔的ID、名称和电话等信息。
     */
    @Override
    Dept createEntity(DeptDto dto, int id) {
        LocalDateTime now = LocalDateTime.now();
        // 使⽤传⼊的部⻔传输对象（DeptDto）中的信息创建⼀个新的部⻔实体对象（Dept），并返回
        return new Dept(id, now,now,dto.name, dto.phone);
    }
    @Override
    void updateEntity(DeptDto dto,Dept dept){
        dept.updateAt = LocalDateTime.now();
        dept.name= dto.name;
        dept.phone= dto.phone;
    }
    @Override
    DeptVo convertToVo(Dept dept) {
        return new DeptVo(dept.getId(),dept.createAt,dept.updateAt,dept.name, dept.phone);
    }
    /**
            * 获取所有有效的部⻔数据。
            * <p>
 * 本⽅法遍历存储部⻔数据的数组，将所有已创建且有效的部⻔（即 ID 对应的部⻔对象不为
`null`）复制到⼀个临时数组中。
            * 然后返回查询成功的结果，并将该临时数组作为返回的数据。
            * </p>
            *
            * @return 返回⼀个 `Result` 对象，包含查询结果的状态和所有有效部⻔的数据
   /*本⽅法通过传⼊的部⻔ ID 删除对应的部⻔数据。如果指定的 ID ⽆效（例如，ID ⼩于
1、ID 超出有效范围，
            * 或者该 ID 对应的数据为 `null`），则返回删除失败的结果。
            * </p>
            *
            * @param id 需要删除的部⻔的 ID
 * @return 返回⼀个 `Result` 对象，表示删除操作是否成功
 */
    private IUserService userService;
    @Override
    public Result delete(int id) {
        if(!existsById(id)){
            return Result.failure("删除失败，不存在该数据");
        }
        if(userService == null){
            userService = SingletonFactory.getInstance(UserService.class);
        }
        // 检查提供的部⻔ ID 是否有效：ID ⼩于 1，ID 超出有效范围，或者该 ID 对应的数据为空
        if (userService.deptInUse(id)) {
            return Result.failure("删除失败，有⽤户属于该部⻔，不能删除");
        }
        // 将指定 ID 的部⻔数据置为 null，表示删除该数据
        data.remove(id);
        // 返回删除成功的结果
        return Result.success("删除成功", null);
    }
    /**
     * 根据 ID 查找部⻔信息
     *
     * @paramid 部⻔ ID
     * @return 部⻔实体对象，如果未找到则返回 null
    /**
     * 单例模式
     */
    private DeptService() {
        temp = new DeptVo[0];
    }
}
